import { _decorator, Component, Node, Button, director, Animation } from 'cc';
import { GameManager } from '../core/GameManager';
import { AudioManager } from '../core/AudioManager';

const { ccclass, property } = _decorator;

/**
 * 暂停面板控制脚本
 * 负责处理暂停面板上的各种UI交互和游戏状态
 */
@ccclass('PausePanel')
export class PausePanel extends Component {
    @property(Button)
    private homeButton: Button = null;
    
    @property(Button)
    private resumeButton: Button = null;
    
    @property(Button)
    private restartButton: Button = null;
    
    @property(Animation)
    private panelAnim: Animation = null;
    
    @property(GameManager)
    private gameManager: GameManager = null;
    
    @property(AudioManager)
    private audioManager: AudioManager = null;
    
    // 生命周期方法
    onLoad() {
        this.initButtonListeners();
        this.findManagers();
    }
    
    onEnable() {
        // 当面板激活时暂停游戏
        this.pauseGame();
    }
    
    onDestroy() {
        // 确保正常移除事件监听器
        try {
            this.removeButtonListeners();
        } catch (error) {
            console.error('移除事件监听器时出错:', error);
        }
    }
    
    /**
     * 查找GameManager和AudioManager实例
     */
    private findManagers(): void {
        // 查找GameManager
        if (!this.gameManager) {
            const gameManagerNode = director.getScene().getChildByName('GameManager');
            if (gameManagerNode) {
                this.gameManager = gameManagerNode.getComponent(GameManager);
            }
            
            if (!this.gameManager) {
                console.warn('未找到GameManager引用，某些功能可能无法正常工作');
            }
        }
        
        // 查找AudioManager
        if (!this.audioManager) {
            const audioManagerNode = director.getScene().getChildByName('AudioManager');
            if (audioManagerNode) {
                this.audioManager = audioManagerNode.getComponent(AudioManager);
            }
            
            if (!this.audioManager) {
                console.warn('未找到AudioManager引用，音频功能可能无法正常工作');
            }
        }
    }
    
    /**
     * 初始化按钮监听
     */
    private initButtonListeners(): void {
        // 返回主界面按钮
        if (this.homeButton && this.homeButton.node) {
            this.homeButton.node.on(Button.EventType.CLICK, this.onHomeButtonClick, this);
        } else {
            console.warn('返回主界面按钮未设置或无效');
        }
        
        // 恢复游戏按钮
        if (this.resumeButton && this.resumeButton.node) {
            this.resumeButton.node.on(Button.EventType.CLICK, this.onResumeButtonClick, this);
        } else {
            console.warn('恢复游戏按钮未设置或无效');
        }
        
        // 重新开始按钮
        if (this.restartButton && this.restartButton.node) {
            this.restartButton.node.on(Button.EventType.CLICK, this.onRestartButtonClick, this);
        } else {
            console.warn('重新开始按钮未设置或无效');
        }
    }
    
    /**
     * 移除按钮监听
     */
    private removeButtonListeners(): void {
        if (this.homeButton && this.homeButton.node) {
            this.homeButton.node.off(Button.EventType.CLICK, this.onHomeButtonClick, this);
        }
        
        if (this.resumeButton && this.resumeButton.node) {
            this.resumeButton.node.off(Button.EventType.CLICK, this.onResumeButtonClick, this);
        }
        
        if (this.restartButton && this.restartButton.node) {
            this.restartButton.node.off(Button.EventType.CLICK, this.onRestartButtonClick, this);
        }
    }
    
    /**
     * 暂停游戏
     */
    private pauseGame(): void {
        console.log('游戏已暂停');
        if (this.gameManager) {
            this.gameManager.pauseGame();
        }
    }
    
    /**
     * 返回主界面按钮点击处理
     */
    private onHomeButtonClick(): void {
        console.log('点击返回主界面按钮');
        
        // 隐藏暂停面板
        this.hidePanel();
        
        // 播放确认音效
        if (this.audioManager) {
            this.audioManager.playSound('button_click_ok');
        }
        
        // 先取消暂停状态
        if (this.gameManager) {
            this.gameManager.resumeGame();
        }
        
        // 直接加载场景，不使用SceneManager
        director.loadScene('MainMenuScene', (err) => {
            if (err) {
                console.error('加载主界面失败:', err);
            } else {
                console.log('成功加载主界面');
            }
        });
    }
    
    /**
     * 恢复游戏按钮点击处理
     */
    private onResumeButtonClick(): void {
        console.log("点击继续按钮");
        
        // 播放按钮音效
        if (this.audioManager) {
            this.audioManager.playSound('button_click');
        }
        
        this.hidePanel();
    }
    
    /**
     * 重新开始按钮点击处理
     */
    private onRestartButtonClick(): void {
        console.log("点击重新开始按钮");
        
        // 播放按钮音效
        if (this.audioManager) {
            this.audioManager.playSound('button_click');
        }
        
        // 重新开始游戏
        if (this.gameManager) {
            this.gameManager.restartGame();
        }
        
        // 隐藏暂停面板
        this.hidePanel();
    }
    
    /**
     * 隐藏暂停面板
     */
    private hidePanel(): void {
        // 播放隐藏动画
        if (this.panelAnim) {
            this.panelAnim.play('panel_hide');
            
            // 注册一个一次性事件，监听动画结束
            this.scheduleOnce(() => {
                this.node.active = false;
            }, 0.3); // 假设动画时长为0.3秒
        } else {
            // 没有动画组件，直接隐藏
            this.node.active = false;
        }
        
        // 恢复游戏
        this.resumeGame();
    }
    
    /**
     * 恢复游戏
     */
    private resumeGame(): void {
        console.log('游戏已恢复');
        if (this.gameManager) {
            this.gameManager.resumeGame();
        }
    }
    
    /**
     * 显示暂停面板
     */
    public show(): void {
        this.node.active = true;
        
        // 播放显示动画
        if (this.panelAnim) {
            this.panelAnim.play('panel_show');
        }
        
        // 暂停游戏
        this.pauseGame();
    }
    
    /**
     * 隐藏暂停面板并恢复游戏
     */
    public hide(): void {
        this.hidePanel();
    }
} 